<html>
    <head>
        <title>自定义存储</title>
    </head>
    <body>
        <script>
             /*
                        三、自定义存储库  Custom Repositories

                                    对于大多数情况，默认的通用存储库就足够了。但是，你可能需要为你的实体创建一个自定义存储库类。

                                    但是，建议继承现有的存储库接口和类，以使你的工作更容易，并开箱即用的标准方法。


                                    1、声明自定义存储接口

                                               首先，在你的域层中定义一个接口：
                                               
                                                    public interface IPersonRepository : IRepository<Person, Guid>
                                                    {
                                                        Task<Person> FindByNameAsync(string name);
                                                    }

                                                接口扩展了IRepository<Person, Guid>以利用预构建的存储库功能。、


                                    2、实现自定义存储库

                                                自定义存储库与你正在使用的数据访问工具类型紧密耦合。

                                                在此示例中，我们将使用Entity Framework Core：

                                                                                    // 继承通用存储库基类                          实现自定义存储库接口
                                                    public class PersonRepository : EfCoreRepository<MyDbContext, Person, Guid>, IPersonRepository
                                                    {
                                                        public PersonRepository(IDbContextProvider<TestAppDbContext> dbContextProvider) 
                                                            : base(dbContextProvider)
                                                        {

                                                        }

                                                        public async Task<Person> FindByNameAsync(string name)
                                                        {
                                                            var dbContext = await GetDbContextAsync();
                                                            return await dbContext.Set<Person>()
                                                                .Where(p => p.Name == name)
                                                                .FirstOrDefaultAsync();
                                                        }
                                                    }


                                            你可以直接访问数据访问提供程序（在本例中为DbContext）来执行操作。

                                            有关自定义存储库的更多信息，请参阅EF Core文档。
                    */

        </script>
    </body>
</html>